package com.bzkj.inventory.mapper;

import com.bzkj.inventory.domain.InventoryCompareTask;
import com.bzkj.inventory.domain.InventoryDiscrepancyDetail;
import com.bzkj.inventory.domain.vo.NccInventory;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @InterfaceName InvenoryServiceMapper
 * @Description TODO
 * @Author C1309
 * @Date 2025/5/13 15:12
 */
public interface InventorySynMapper {

    /**
     * 同步NCC库存数据至WMS数据库
     *
     * @param nccInventory 库存数据
     * @return 插入结果
     */
    int insertInventoryData(@Param("nccInventory") NccInventory nccInventory,
                            @Param("index") String index,
                            @Param("operator") String operator,
                            @Param("warehousePk") String warehousePk,
                            @Param("warehouseid") String warehouseid);

    /**
     * 获取WMS管理并启用的所有NCC仓库的pk
     *
     * @return 仓库pk列表
     */
    List<String> getWarehousePkList();


    /**
     * 按仓库获取WMS库存数据
     *
     * @param warehousePk 仓库主键
     * @return 库存数据
     */
    List<NccInventory> getWmsInventoryList(String warehousePk);

    /**
     * 插入库存比较任务
     *
     * @param task 库存比较任务
     */
    void insertDiscrepancyTask(InventoryCompareTask task);

    /**
     * 批量插入库存差异详情
     *
     * @param detailList 差异详情
     */
    void insertBatch(List<InventoryDiscrepancyDetail> detailList);

    /**
     * 更新库存比较任务总差异数量
     *
     * @param id   库存比较任务id
     * @param size 差异条数
     */
    void updateTotalDiscrepancy(@Param("id") Long id, @Param("size") int size);


    /**
     * 获取用户管理仓库
     *
     * @return 仓库列表
     */
    List<String> getUserManageWarehouse(Long userId);

    /**
     * 获取异常库存
     *
     * @param substring 仓库名称
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param isResolved 是否已解决
     * @return 异常数据
     */
    List<InventoryCompareTask> getAbnoralInventory(@Param("substring") String substring,
                                                   @Param("startDate") Date startDate,
                                                   @Param("endDate") Date endDate,
                                                   @Param("isResolved") String isResolved);

    /**
     * 获取库存差异详情
     *
     * @param taskId 库存比较任务id
     * @return 库存差异详情
     */
    List<InventoryDiscrepancyDetail> getInventoryDiscrepancyDetail(Long taskId);

    /**
     * 更新处理状态
     * @param taskId 库存比较任务id
     * @param username 处理人
     * @return 更新结果
     */
    int updateTaskId(@Param("taskId") Long taskId, @Param("username") String username);
}
